package schuchert.agent;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import org.junit.Test;

public class ManifestTest {
    public static final String EXPECTED = String.format("Premain-Class: %s",
            ConfigurableClassFileTransformerRegistrar.class.getName());

    public static final String ERROR = String
            .format("Did not find line matching: '%s' -- was class renamed?", EXPECTED);

    @Test
    public void manifestHasCorrectClassName() throws Exception {
        FileReader reader = null;
        BufferedReader bufferedReader = null;

        try {
            reader = retrieveThisProjectsManifest();
            bufferedReader = new BufferedReader(reader);
            assertTrue(ERROR, foundPremainClassLineWithCorrectClassName(bufferedReader));
        } finally {
            closeIfNotNull(bufferedReader);
            closeIfNotNull(reader);
        }
    }

    private boolean foundPremainClassLineWithCorrectClassName(BufferedReader bufferedReader) throws Exception {
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            if (line.equals(EXPECTED))
                return true;
        }

        return false;
    }

    private FileReader retrieveThisProjectsManifest() throws FileNotFoundException {
        FileReader reader = new FileReader("META-INF/MANIFEST.MF");
        assertNotNull(reader);
        return reader;
    }

    private void closeIfNotNull(Reader reader) throws Exception {
        if (reader != null)
            reader.close();
    }
}
